package com.message.api.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.message.api.user.entity.AcUser;
import com.message.api.user.vo.AcUserVo;
import com.message.api.user.vo.EnSetPwdVo;
import com.message.api.user.vo.RegisterExamineeVo;
import com.message.api.user.vo.RegisterStudentVo;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author mzl
 * @since 2020-07-09
 */
public interface AcUserService extends IService<AcUser> {

    /**
     * 自定义分页查询
     *
     * @param page
     * @return
     */
    Page<AcUserVo> findByPage(Page<AcUserVo> page, AcUserVo example);

    /**
     * 条件查询
     *
     * @param example
     * @return
     */
    List<AcUserVo> findByExample(AcUserVo example);

    /**
     * 获取角色的用户
     *
     * @param groupid
     * @return
     */
    List<AcUserVo> findByGroupid(Integer groupid);

    /**
     * 根据账号获取用户
     *
     * @param username
     * @return
     */
    AcUser findByUsername(String username);

    /**
     * 设置用户状态
     *
     * @param id
     * @param enable
     */
    @Transactional
    AcUser setEnable(Integer id, String enable);

    /**
     * 注册考生账号信息
     *
     * @param examinee
     * @return
     */
    @Transactional
    AcUser registerExamineeUser(RegisterExamineeVo examinee);

    /**
     * 注册学生账号信息
     *
     * @param student
     * @return
     */
    @Transactional
    AcUser registerStudentUser(RegisterStudentVo student);

    /**
     * 更新用户真实姓名
     *
     * @param id
     * @param realname
     * @return
     */
    @Transactional
    AcUser updateUserRealname(Integer id, String realname);

    /**
     * 设置密码
     *
     * @param setPwd
     * @return
     */
    @Transactional
    AcUser setPwd(EnSetPwdVo setPwd);

    /**
     * @param userIds
     * @return
     */
    @Transactional
    List<AcUser> deleteByUserIds(List<Integer> userIds);

    /**
     * 角色id和部门id
     * @param acGroup
     * @param departmentId
     * @return
     */
    List<AcUser> selectByAcGroupAndDepartmentId(Integer acGroup, Integer departmentId);

    /**
     * 根据教工号获取用户
     * @param teacherNumber
     * @return
     */
    AcUser findByTeacherNumber(String teacherNumber);
}
